#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <poll.h>


#define KEY_ENTER		28


struct key_event{
	int code; // 表示按键的类型
	int value; // 表示按下还是抬起 1 / 0
};

int main(int argc, char *argv[])
{
	int ret;
	char in_buf[128];
	struct key_event event;

	int fd = open("/dev/key0", O_RDWR);  //无阻塞方式打开 int fd = open("/dev/key0", O_RDWR|O_NONBLOCK);
	if(fd < 0)
	{
		perror("open");
		exit(1);
	}


	//监控多个文件fd
	struct pollfd pfd[2];

	pfd[0].fd = fd; //监控按键设备
	pfd[0].events = POLLIN; //读事件

	pfd[1].fd = 0; //标准输入stdin
	pfd[1].events = POLLIN;

	while(1)
	{
		printf("&&&&&&&&&&&&&&&&&&&&&&&&&\n");
	
		ret = poll(pfd, 2, -1);
		printf("ret = %d\n", ret);

		if(ret == -1)
		{	
			perror("poll");
			exit(1);
		}

		printf("********检测按键设备*****qian***\n");


		//检测按键设备
		if(pfd[0].revents & POLLIN)
		{
		 printf("********检测按键设备********\n");
			read(fd, &event, sizeof(struct key_event));
			if(event.code == KEY_ENTER)
			{
    			if(event.value)
    			{
    				printf("APP__ key enter pressed\n");
    			}else{
    				printf("APP__ key enter up\n");
    			}
			}	
		}

		printf("********检测键盘标准输入****qian****\n");
		//检测键盘标准输入
		if(pfd[1].revents & POLLIN)
		{
			printf("********检测键盘标准输入********\n");
			fgets(in_buf, 128, stdin);
			printf("in_buf = %s\n", in_buf);
		}		
	}

	close(pfd[0].fd);

	return 0;
}




